package com.system.api;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.validation.Valid;
import org.springframework.stereotype.Component;
import org.yang.common.core.exception.BaseException;
import org.yang.database.orm.entity.BaseQuery;

import java.util.List;

/**
 * 超类接口
 * @author: lslands
 * @description:   
 * @version：v1.0
 * @date:    2024/6/13 12:57
 */
@Component
public interface SuperInterface<T> {



    /**
     * 插入
     * @param record 插入对象
     * @return int
     * @throws BaseException 空指针异常
     */
    int handInsert(@Valid T record) throws BaseException;

    /**
     * 根据主键ID修改
     * @param record 修改对象
     * @return int
     * @throws BaseException 修改异常
     */
    int handUpdateById(@Valid T record) throws BaseException;

    /**
     * 根据主键ID修改状态
     * @param id 主键ID
     * @param enabled 状态
     * @param revision 乐观锁版本
     * @return int
     * @throws BaseException 修改状态异常
     */
    int handEnabledById(Long id,Integer enabled,Integer revision) throws BaseException;

    /**
     * 分页模糊查询列表
     * @param query 分页基础参数
     * @param record 查询条件
     * @return Page<SysIcon>
     */
    Page<T> getPage(BaseQuery query, T record) throws BaseException;

    /**
     * 单条删除(逻辑);
     * @param id 主键ID
     * @return int
     * @throws BaseException 删除异常
     */
    int deleteOne(Long id) throws BaseException;

    /**
     * 批量删除
     * @param delete 是否物理删除
     * @param ids ids集
     * @return int
     * @throws BaseException 删除异常
     */
    int deleteBatch(Boolean delete,List<Long> ids) throws BaseException;
}
